package com.tencent.face.util;

import com.tencent.face.enums.FaceApi;
import com.tencent.face.config.FaceConfigParam;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.profile.Language;
import com.tencentcloudapi.faceid.v20180301.FaceidClient;
import com.tencentcloudapi.iai.v20200303.IaiClient;

/**
 * @description:
 * @date: 2022/5/19
 * @author: shendong
 */
public class TencentHttpUtil {

    private FaceConfigParam faceConfigParam;

    public TencentHttpUtil(FaceConfigParam faceConfigParam){
        this.faceConfigParam = faceConfigParam;
    }

    public IaiClient initIaiClient(FaceApi faceApi){
        try {
            // 实例化一个认证对象，入参需要传入腾讯云账户secretId，secretKey,此处还需注意密钥对的保密
            Credential cred = new Credential(faceConfigParam.getSecretId(), faceConfigParam.getSecretKey());
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setReqMethod(faceApi.getReqMethod()); // get请求(默认为post请求)
            httpProfile.setProtocol(faceConfigParam.getProtocol());  // 在外网互通的网络环境下支持http协议(默认是https协议),请选择(https:// or http://)
            httpProfile.setConnTimeout(faceConfigParam.getConnTimeout()); // 请求连接超时时间，单位为秒(默认60秒)
            httpProfile.setWriteTimeout(faceConfigParam.getWriteTimeout());  // 设置写入超时时间，单位为秒(默认0秒)
            httpProfile.setReadTimeout(faceConfigParam.getReadTimeout());  // 设置读取超时时间，单位为秒(默认0秒)
            httpProfile.setEndpoint(faceApi.getUrl()); // 指定接入地域域名(默认就近接入)
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setSignMethod(faceConfigParam.getSignMethod()); // 指定签名算法(默认为HmacSHA256)
            // 自3.1.80版本开始，SDK 支持打印日志。
            clientProfile.setHttpProfile(httpProfile);
            clientProfile.setDebug(faceConfigParam.isDebug());
            // 从3.1.16版本开始，支持设置公共参数 Language, 默认不传，选择(ZH_CN or EN_US)
            clientProfile.setLanguage(Language.EN_US);
            // 实例化要请求产品的client对象,clientProfile是可选的
            return new IaiClient(cred,faceConfigParam.getRegion(), clientProfile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public FaceidClient initFaceidClient(FaceApi faceApi){
        try {
            // 实例化一个认证对象，入参需要传入腾讯云账户secretId，secretKey,此处还需注意密钥对的保密
            Credential cred = new Credential(faceConfigParam.getSecretId(), faceConfigParam.getSecretKey());
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setReqMethod(faceApi.getReqMethod()); // get请求(默认为post请求)
            httpProfile.setProtocol(faceConfigParam.getProtocol());  // 在外网互通的网络环境下支持http协议(默认是https协议),请选择(https:// or http://)
            httpProfile.setConnTimeout(faceConfigParam.getConnTimeout()); // 请求连接超时时间，单位为秒(默认60秒)
            httpProfile.setWriteTimeout(faceConfigParam.getWriteTimeout());  // 设置写入超时时间，单位为秒(默认0秒)
            httpProfile.setReadTimeout(faceConfigParam.getReadTimeout());  // 设置读取超时时间，单位为秒(默认0秒)
            httpProfile.setEndpoint(faceApi.getUrl()); // 指定接入地域域名(默认就近接入)
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setSignMethod(faceConfigParam.getSignMethod()); // 指定签名算法(默认为HmacSHA256)
            // 自3.1.80版本开始，SDK 支持打印日志。
            clientProfile.setHttpProfile(httpProfile);
            clientProfile.setDebug(faceConfigParam.isDebug());
            // 从3.1.16版本开始，支持设置公共参数 Language, 默认不传，选择(ZH_CN or EN_US)
            clientProfile.setLanguage(Language.EN_US);
            // 实例化要请求产品的client对象,clientProfile是可选的
            return new FaceidClient(cred,faceConfigParam.getRegion(), clientProfile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
